package srv;

import java.util.ArrayList;
import java.util.List;

import beans.ClienteBean;
import beans.CondicionVentaBean;
import beans.ItemPedidoVentaBean;
import beans.ListaPreciosBean;
import beans.OficinaVentaBean;
import beans.PedidoVentaBean;
import beans.RodamientoBean;
import dao.HibernatePedidoVentaBeanDAO;
import entities.ClienteEntity;
import entities.CondicionVentaEntity;
import entities.ItemPedidoVentaEntity;
import entities.ListaPreciosEntity;
import entities.OficinaVentaEntity;
import entities.PedidoVentaEntity;
import entities.RodamientoEntity;

public class PedidoVentaSRV 
{
	private static HibernatePedidoVentaBeanDAO dao;
	private static PedidoVentaSRV instancia;
	
	static 
	{
		dao = HibernatePedidoVentaBeanDAO.getInstancia();
	}
	
	public static PedidoVentaSRV getInstancia()
	{
		if (instancia == null)
		{
			instancia = new PedidoVentaSRV();
		}
		return instancia;
	}
	
	public PedidoVentaEntity pasadoDesdeBean( PedidoVentaBean pedidoVentaBean )
	{
		PedidoVentaEntity pedidoVenta = new PedidoVentaEntity();
		
		ClienteEntity cliente = ClienteSRV.getInstancia().pasadoDesdeBean(pedidoVentaBean.getCliente());
		pedidoVenta.setCliente(cliente);
		pedidoVenta.setId( pedidoVentaBean.getId());
		
		List<ItemPedidoVentaEntity> items = new ArrayList<ItemPedidoVentaEntity>();
		for( ItemPedidoVentaBean itemBean : pedidoVentaBean.getItems())
		{
			ItemPedidoVentaEntity item = new ItemPedidoVentaEntity();
			item.setCantidad( itemBean.getCantidad());
			
			/*
			ListaPreciosEntity listaDePrecios = ListaPreciosSRV.getInstancia().pasadoDesdeBean( itemBean.getListaDePrecios());
			item.setListaDePrecios(listaDePrecios);
			*/
			
			item.setPrecio( itemBean.getPrecio());
			
			RodamientoEntity rodamiento = RodamientoSRV.getInstancia().pasadoDesdeBean( itemBean.getRodamiento());
			item.setRodamiento(rodamiento);
			
			items.add( item );
		}
		
		pedidoVenta.setProcesado( pedidoVentaBean.isProcesado());
		
		OficinaVentaEntity sucursal = OficinaVentaSRV.getInstancia().pasadoDesdeBean( pedidoVentaBean.getSucursal());
		pedidoVenta.setSucursal(sucursal);
		
		return pedidoVenta;
	}
	
	public PedidoVentaBean pasadoDesdeEntity( PedidoVentaEntity pedidoVentaEntity )
	{
		PedidoVentaBean pedidoVenta = new PedidoVentaBean();
		
		ClienteBean cliente = ClienteSRV.getInstancia().pasadoDesdeEntity(pedidoVentaEntity.getCliente());
		pedidoVenta.setCliente(cliente);
		pedidoVenta.setId( pedidoVentaEntity.getId());
		
		List<ItemPedidoVentaBean> items = new ArrayList<ItemPedidoVentaBean>();
		for( ItemPedidoVentaEntity itemEntity : pedidoVentaEntity.getItems())
		{
			ItemPedidoVentaBean item = new ItemPedidoVentaBean();
			item.setCantidad( itemEntity.getCantidad());
			
			/*
			ListaPreciosBean listaDePrecios = ListaPreciosSRV.getInstancia().pasadoDesdeEntity( itemEntity.getListaDePrecios());
			item.setListaDePrecios(listaDePrecios);
			*/
			
			item.setPrecio( itemEntity.getPrecio());
			
			RodamientoBean rodamiento = RodamientoSRV.getInstancia().pasadoDesdeEntity( itemEntity.getRodamiento());
			item.setRodamiento(rodamiento);
			
			items.add( item );
		}
		
		pedidoVenta.setProcesado( pedidoVentaEntity.isProcesado());
		
		OficinaVentaBean sucursal = OficinaVentaSRV.getInstancia().pasadoDesdeEntity( pedidoVentaEntity.getSucursal());
		pedidoVenta.setSucursal(sucursal);
		
		return pedidoVenta;
	}
	
	public int grabarPedidoVenta( PedidoVentaBean pv)
	{
		PedidoVentaEntity pedidoVenta = this.pasadoDesdeBean( pv ); 
		return dao.grabarPedidoVenta( pedidoVenta );
	}
	
	public PedidoVentaBean obtenerPedidoVentaPorId( int idPedidoVenta )
	{
		PedidoVentaEntity pedidoVentaEntity = new PedidoVentaEntity();
		pedidoVentaEntity = dao.obtenerPedidoVentaPorId(idPedidoVenta);
		
		PedidoVentaBean pedidoVenta = this.pasadoDesdeEntity( pedidoVentaEntity );
		return pedidoVenta;
	}
	
	public void actualizarPedidoVenta( PedidoVentaBean pv )
	{
		PedidoVentaEntity pedidoVenta = this.pasadoDesdeBean( pv );
		dao.actualizarPedidoVenta( pedidoVenta );
	}
	
	public List<PedidoVentaBean> obtenerPedidosVentaPorCliente( String cuit)
	{
		try
		{	
			List<PedidoVentaEntity> lpve = dao.obtenerPedidosVentaPorCliente(cuit);	
			List<PedidoVentaBean> lpvb = new ArrayList<PedidoVentaBean>();
			
			for( PedidoVentaEntity pve : lpve )
			{
				PedidoVentaBean pvb = new PedidoVentaBean();
				pvb.setCliente( ClienteSRV.getInstancia().pasadoDesdeEntity( pve.getCliente() ) );
				
				List<CondicionVentaBean> lcvb = new ArrayList<CondicionVentaBean>();				
				for( CondicionVentaEntity cve : pve.getCondicionesVenta() )
				{
					CondicionVentaBean cvb = new CondicionVentaBean();
					cvb.setDescuento( cve.getDescuento() );
					cvb.setDiasFinanciacion( cve.getDiasFinanciacion() );
					cvb.setRecargo( cve.getRecargo() );
					cvb.setTipo( cve.getTipo() );
					
					lcvb.add( cvb );
				}
				
				pvb.setCotizacion( CotizacionSRV.getInstancia().pasadoDesdeEntity( pve.getCotizacion() ) );
				
				List<ItemPedidoVentaBean> lipvb = new ArrayList<ItemPedidoVentaBean>();
				for ( ItemPedidoVentaEntity ipve : pve.getItems() )
				{
					ItemPedidoVentaBean item = new ItemPedidoVentaBean();
					item.setCantidad( ipve.getCantidad() );
					item.setListaDePrecios( ipve.getListaDePrecios() );
					item.setPrecio( ipve.getPrecio() );
					item.setRodamiento( RodamientoSRV.getInstancia().pasadoDesdeEntity( ipve.getRodamiento() ) );
					
					lipvb.add(item);
				}
				
				pvb.setProcesado( pve.isProcesado() );
				pvb.setSucursal( OficinaVentaSRV.getInstancia().pasadoDesdeEntity( pve.getSucursal() ) );
				
				lpvb.add( pvb );
			}
			
			return lpvb;
		}
		catch(Exception e)
		{	
			e.toString();
			return null;
		}
	}

}
